<?php

/**
 * 调用yii接口
 */
if(!defined('IN_SUPESITE')) {
	exit('Access Denied');
}

class YiiComm
{
	
	/**
	 * 调用函数
	 * @param string $modelClass model类名字
	 * @param object $post   $_PSOT对象
     * @param boolean $isCallBeforeOutPut 是否回调Model类中的beforeOutPut方法，默认调用
	 * @return array 返回Model对象数组
	 */
	public static function findData($modelClass, $post = null, $isCallBeforeOutPut = true)
	{
		return self::findDataByMethod($modelClass, "findData", $post, $isCallBeforeOutPut);
	}
	
	/**
	 * 调用函数
	 * @param string $modelClass model类名字
	 * @param string $methodName   调用的函数名
	 * @param object $post   $_PSOT对象
     * @param boolean $isCallBeforeOutPut 是否回调Model类中的beforeOutPut方法，默认调用
	 * @return array 返回Model对象数组
	 */
	public static function findDataByMethod($modelClass, $methodName, $post = null, $isCallBeforeOutPut = true)
	{
		$data = self::executeByMethod($modelClass, $methodName, $post, $isCallBeforeOutPut);
		if(is_array($data))
		{
			return $data;
		}
		else
		{
			return $data->getModels();
		}
	}
	
	/**
	 * 调用分页接口
	 * @param string $modelClass model类名字
	 * @param object $post   $_PSOT对象
     * @param boolean $isCallBeforeOutPut 是否回调Model类中的beforeOutPut方法，默认调用
	 * @return array 带分页的数据
	 */
	public static function findDataByPagination($modelClass, $post = null, $isCallBeforeOutPut = true)
	{
		return self::executeByMethod($modelClass, "findData", $post, $isCallBeforeOutPut);
	}


    //2016 04 12 lp 重新调用分页接口 由于该方法默认调用findData方法。调用制定方法
    public static function findDataByPaginations($modelClass, $post = null, $isCallBeforeOutPut = true)
    {
        return self::executeByMethod($modelClass, "getBrandList", $post, $isCallBeforeOutPut);
    }
   //2016 05 03 分页
    public static function findDataByPage($modelClass,$method, $post = null, $isCallBeforeOutPut = true)
    {
        return self::executeByMethod($modelClass, $method, $post, $isCallBeforeOutPut);
    }

    /**
	 * 调用自定义函数
	 * @param string $modelClass model类名字
	 * @param string $methodName 调用的函数名
	 * @param object $args   给调用函数传参,顺序和函数的参数顺序一致 array($a, $b ...)
     * @param boolean $isCallBeforeOutPut 是否回调Model类中的beforeOutPut方法，默认调用
	 * @return mixed 
	 */
	public static function executeByMethod($modelClass, $methodName, array $args, $isCallBeforeOutPut = true)
	{
		$class = new ReflectionClass($modelClass);
		$method = $class->getMethod("findDataToArray");
                $arr = self::array_merge_post(array("isCallBeforeOutPut"=>$isCallBeforeOutPut,"method"=>$methodName));
		$rs = $method->invokeArgs($class->newInstance(), array(array_merge($arr, array($args))));
		return $rs;
	}
	
	/**
	 * 将传递的数组和$_POST合并
	 * @param array $array
	 */
	public static function array_merge_post($array)
	{
		if(!isset($array) || !is_array($array))
		{
			return array();
		}
		return array_merge($_POST, $array);
	}
	
	/**
	 * 执行insert、update、delete语句
	 * @param string $modelClass model类名字
	 * @param object $post   $_PSOT对象
	 * @return array 返回Model对象数组
	 */
	public static function executeData($modelClass, $post = null)
	{
		return self::executeDataByMethod($modelClass, "executeDML", $post);
	}
	
	public static function executeDataByMethod($modelClass, $methodName, $post = null)
	{
		return self::executeByMethod($modelClass, $methodName, self::array_merge_post($post));
		
	}
	
}

?>